/*
 * Copyright (c) 2017 jinbei6.com All Rights Reserved.
 */
package com.changjiang.luban.utils.encryption;

/**
 * 描述:加盐MD5算法
 * @author nichangjiang@vip.qq.com
 * 创建时间: 2017/12/21. 19:18
 * 修改人:
 * 修改时间:
 * 修改备注:
 * 版本:v1.0
 */
public class SaltMD5Utils {

    private static final Integer SALT_LENGTH=16;

    /**
     * 通过salt+MD5方式加密
     * @param pwd  密码
     * @param salt 盐
     * @return
     */
    public static String encode(String pwd,String salt){
        String mixResult = mixStr(pwd,salt);
        return MD5Utils.encodeMd5(mixResult);
    }

    /**
     * 将密码明文和salt混合，混合方式为salt一个字符+一个密码明文字符，逐个追加
     * @param pwd  密码
     * @param salt 盐
     * @return
     */
    private static String mixStr(String pwd, String salt) {
        StringBuilder builder = new StringBuilder();
        builder.append(salt.substring(0, 5));
        String saltLast = salt.substring(5);
        for(int i=0; i<pwd.length(); i++){
            if(saltLast.length() > i){
                builder.append(saltLast.charAt(i));
            }
            builder.append(pwd.charAt(i));
        }
        if(saltLast.length() > pwd.length()){
            builder.append(saltLast.substring(pwd.length()));
        }
        return builder.toString();
    }

    public static void main(String[] args) {
        String salt = "123456";
        System.err.println(salt);
        System.err.println(encode("123456", salt));
    }

}
